export default {
  // 当某月的天数
  getDaysInOneMonth (date) {
    const year = date.getFullYear()
    const month = date.getMonth() + 1
    const d = new Date(year, month, 0)
    return d.getDate()
  },
  // 向前空几个
  getMonthweek (date) {
    const year = date.getFullYear()
    const month = date.getMonth() + 1
    const dateFirstOne = new Date(year + '-' + month + '-1')
    return this.sundayStart
      ? dateFirstOne.getDay() === 0
        ? 7
        : dateFirstOne.getDay()
      : dateFirstOne.getDay() === 0
        ? 6
        : dateFirstOne.getDay() - 1
  },
  /**
   * 获取当前日期上个月或者下个月
   */
  getOtherMonth (date, str = 'nextMonth') {
    const timeArray = this.dateFormat(date).split('-')
    const year = timeArray[0]
    const month = timeArray[1]
    const day = timeArray[2]
    let year2 = year
    let month2
    if (str === 'nextMonth') {
      month2 = parseInt(month) + 1
      if (month2 === 13) {
        year2 = parseInt(year2) + 1
        month2 = 1
      }
    } else {
      month2 = parseInt(month) - 1
      if (month2 === 0) {
        year2 = parseInt(year2) - 1
        month2 = 12
      }
    }
    let day2 = day
    const days2 = new Date(year2, month2, 0).getDate()
    if (day2 > days2) {
      day2 = days2
    }
    if (month2 < 10) {
      month2 = '0' + month2
    }
    if (day2 < 10) {
      day2 = '0' + day2
    }
    const t2 = year2 + '-' + month2 + '-' + day2
    return new Date(t2)
  },
  // 上个月末尾的一些日期
  getLeftArr (date) {
    const arr = []
    const leftNum = this.getMonthweek(date)
    const num = this.getDaysInOneMonth(this.getOtherMonth(date, 'preMonth')) - leftNum + 1
    const preDate = this.getOtherMonth(date, 'preMonth')
    // 上个月多少开始
    for (let i = 0; i < leftNum; i++) {
      const nowTime = preDate.getFullYear() + '-' + (preDate.getMonth() + 1) + '-' + (num + i)
      arr.push({
        id: num + i,
        date: nowTime,
        isToday: false,
        otherMonth: 'preMonth'
      })
    }
    return arr
  },
  // 下个月末尾的一些日期
  getRightArr (date) {
    const arr = []
    const nextDate = this.getOtherMonth(date, 'nextMonth')
    const leftLength = this.getDaysInOneMonth(date) + this.getMonthweek(date)
    const _length = 7 - (leftLength % 7)
    for (let i = 0; i < _length; i++) {
      const nowTime = nextDate.getFullYear() + '-' + (nextDate.getMonth() + 1) + '-' + (i + 1)
      arr.push({
        id: i + 1,
        date: nowTime,
        isToday: false,
        otherMonth: 'nextMonth'
      })
    }
    return arr
  },
  // format日期
  dateFormat (date) {
    date = typeof date === 'string' ? new Date(date.replace(/-/g, '-')) : date
    return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate()
  },
  // 获取某月的列表不包括上月和下月
  getMonthListNoOther (date) {
    const arr = []
    const num = this.getDaysInOneMonth(date)
    const year = date.getFullYear()
    const month = date.getMonth() + 1
    const toDay = this.dateFormat(new Date())

    for (let i = 0; i < num; i++) {
      const nowTime = year + '-' + month + '-' + (i + 1)
      arr.push({
        id: i + 1,
        date: nowTime,
        isToday: toDay === nowTime,
        otherMonth: 'nowMonth'
      })
    }
    return arr
  },
  // 获取某月的列表 用于渲染
  getMonthList (date) {
    return [...this.getLeftArr(date), ...this.getMonthListNoOther(date), ...this.getRightArr(date)]
  },
  // 默认是周一开始
  sundayStart: false,
  // 设置当前
  setCurrentMonth (dateVal) {
    // 如果为null,则格式化当前时间
    var value = Number(new Date(dateVal))
    // 如果dateTime长度为10或者13，则为秒和毫秒的时间戳，如果超过13位，则为其他的时间格式
    if (value.toString().length === 10) value *= 1000
    value = +new Date(Number(value))

    const targetTime = new Date(value)
    const year = targetTime.getFullYear()
    let month = targetTime.getMonth() + 1
    if (month < 10) {
      month = '0' + month
    }

    const yDate = new Date(year, month, 0)

    const startDateTime = year + '-' + month + '-' + '01' // 这个月第一天
    const endDateTime = year + '-' + month + '-' + yDate.getDate() // 这个月最后一天
    return {
      startDate: startDateTime,
      endDate: endDateTime
    }
  }
}
